package com.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.dto.BizBaseItemDto;
import com.entity.BizBaseItemEntity;

import java.util.Collection;
import java.util.List;

/**
 * @author: Cxx
 * @Version 1.0
 * @create: 2025-09-15 14:01
 * @description:分录服务接口
 **/
public interface IBizBaseItemService<T extends BizBaseItemEntity> extends IService<T> {


    /**
     * description: 基于所属单据头内码查询分录 <br>
     * version: 1.0 <br>
     * date: 2025/9/15 11:33 <br>
     * author: Cxx <br>
     *
     * @param headGuid 所属单据头内码
     * @return java.util.List<T> 分录
     */
    List<T> listByHeadGuid(String headGuid);

    /**
     * description: 基于所属单据头内码查询分录 <br>
     * version: 1.0 <br>
     * date: 2025/9/29 10:56 <br>
     * author: Cxx <br>
     *
     * @param headGuids 所属单据头内码
     * @return java.util.List<T> 分录
     */
    List<T> listByHeadGuids(Collection<String> headGuids);

    /**
     * description:  基于所属单据头内码查询分录DTO <br>
     * version: 1.0 <br>
     * date: 2025/9/15 11:34 <br>
     * author: Cxx <br>
     *
     * @param headGuid 所属单据头内码
     * @param clazz    分录DTO类型
     * @return java.util.List<D> 分录DTO
     */
    <D extends BizBaseItemDto> List<D> listDtoByHeadGuid(String headGuid, Class<D> clazz);

    /**
     * description: 基于所属单据头内码删除分录 <br>
     * version: 1.0 <br>
     * date: 2025/9/15 11:36 <br>
     * author: Cxx <br>
     *
     * @param headGuid 所属单据头内码
     * @return boolean 结果
     */
    boolean removeByHeadGuid(String headGuid);

    /**
     * description:  批量保存名录DTO<br>
     * version: 1.0 <br>
     * date: 2025/9/15 11:40 <br>
     * author: Cxx <br>
     *
     * @param dtoList  分录DTO
     * @param headGuid 所属单据头内码
     * @return boolean 结果
     */
    <D extends BizBaseItemDto> boolean saveOrUpdateBatchDto(List<D> dtoList, String headGuid);

    /**
     * description: 批量保存名录DTO <br>
     * version: 1.0 <br>
     * date: 2025/9/16 20:06 <br>
     * author: Cxx <br>
     *
     * @param dtoList  分录DTO
     * @param headGuid 所属单据头内码
     * @return boolean 结果
     */
    <D extends BizBaseItemDto> boolean saveBatchDto(List<D> dtoList, String headGuid);

}
